<?php
/**
 * Класс предназначен для работы с переходами посетителя
 *
 */
class User_SessionHit extends MultiKeyRecord {
	protected static $_tableName = 'session_hit';
	protected static $_arrPkNames = array(
		'ID_session' => 'sessionId', 
		'date' => 'date'
	);
	public $sessionId = null;
	public $date = null;
	
	protected $arrSettings = array(
		'created_at' => true,  // в БД храним время создания
		'updated_at' => true,  // в БД храним время обновления
	);
	// Структура переходов которые не нужно учитывать
	protected static $_arrBadHits = array(
		'cms' => 1,
		'parse' => 1,
		'banner' => 1,
		'widget' => 1,
		'ajax' => array(
			'profile' => 1,	
			'place' => 1,			
			'hotel' => array(
				'check_available' => 1
			),
			'statistic' => 1
		),			
	);
	
	/**
	 * Сохраняем переход пользователя
	 * 
	 * @param array $arrRequest - URL по которому пришел пользователь в разобранном виде
	 * @param string $sessionId - ID сессии посетителя
	 */
	public static function saveHit(array $arrRequest, $sessionId) {
		if (self::isBadHit($arrRequest)) return false;
		$today = Service_Date::getToday();
		$objSessionHit = new User_SessionHit($sessionId, $today);

		if ($objSessionHit->isLoaded()) {
			$objSessionHit->incrementColumn('hits');
		}
		else {
			$objSessionHit = new User_SessionHit();
			$objSessionHit->tableFields = array(
				'ID_session' => $sessionId,
				'date' => $today,
				'hits' => 1
			);
			try {
				$objSessionHit->save(); 
			}
			catch (Exception_Database $e) {
				$objSessionHit = new User_SessionHit($sessionId, $today);
				$objSessionHit->incrementColumn('hits');
			}
			
		}
		if ($arrRequest[0] == 'book' && $arrRequest[1] == '') {
			$objSessionHit->incrementColumn('booking_form_hits');
		}
		return true;
	}
	
	/**
	 * Проверяем надо ли считать этот переход
	 * 
	 * @param array $arrRequest - URL по которому пришел пользователь в разобранном виде
	 * @return boolean - Результат проверки
	 */
	public static function isBadHit(array $arrRequest) {
		$i = 0;
		$arrBadHits = self::$_arrBadHits;
		do {
			if (!isset($arrBadHits[$arrRequest[$i]])) return false;
			if (!is_array($arrBadHits[$arrRequest[$i]])) return true;
			$arrBadHits = $arrBadHits[$arrRequest[$i]];
			$i++;
		} 
		while (1);
	}
}
?>